/**
 * Lee el archivo indicado por xmldir, en caso de existir y estar bien formado ejecuta
 * la funcion doneFunction, en caso de no existir el archivo o estar mal formado
 * ejecuta failFunction
 * 
 * @param xmldir String con la direccion del archivo
 * 
 * @param doneFunction funcion que se ejecutara si el archivo existe y esta bien formado,
 *  recive como parametro una variable xml con el contenido del archivo
 *  
 * @param failFunction funcion que se ejectuara si hay algun problema, resive una variable con
 * el status de la falla con lo que se peude identificar a que se debe
 * 
 */
function getXML(xmldir,doneFunction,failFunction)
{
	var request = $.ajax({url: xmldir,type: "GET",dataType: "xml"});
	request.done(doneFunction);
	request.fail(failFunction);	
}

/**
 * Resive el objeto xml, su data es usada para llenar la tabla en donde se mostrarar y manejaran los datos.
 * 
 * @param xml objeto xml con estructura definida para la data de esta tarea
 * 
 */

function initdone(xml)
{
	var data=new Array();
	$(xml).find('campus').each(function()
	{
		data[0]=$(this).attr('name');

		$(this).children('carrera').each(function()
		{
			data[1]=$(this).attr('name');
			
			$(this).children('ProcesoDeEvaluacion').each(function()
			{
				data[2]=$(this).attr('state');
			
				data[3]=$(this).children('FechaAcreditacion').text()
				data[4]=$(this).children('AniosAcreditacion').text()
				data[5]=$(this).children('AgenciaAcreditadoraVigente').text()
				data[6]=$(this).children('AgenciaAcreditadoraActual').text()
				data[7]=$(this).children('PerfilPregrado').text()
				data[8]=$(this).children('Investigacion').text()
				data[9]=$(this).children('Investigacion').text()
				data[10]=$(this).children('VinculacionMedio').text()
				
			});				
		});
		
		
		data[11]="DELETE";
		var a = $('#table').dataTable().fnAddData( data);
		ntr = $('#table').dataTable().fnSettings().aoData[ a[0] ].nTr
		$(($(ntr.cells[0]).closest('tr').find('td:last'))).attr('class',"DELETE");
		
		$(".DELETE").each(function()
		{
			$(this).click(function(o)
			{
				deleteRow($(this).closest('tr').get(0));
			})
		})

	});
}

/**
 * 
 * @param jqXHR Objeto que hereda de XMLHttpRequest y contiene informacion sobre el error
 * @param textStatus String, descripcion del error
 */
function initfail(jqXHR,textStatus)
{
	if(textStatus=="parsererror")
	{
		alert("Archivo mal formado")
	}
	else //archivo no existe
	{
		$.post("./save.php",{s:""});
	}
}

/**
 * Funcion que crea una nueva fila en la tabla y agrega un registro al archivo, 
 * los datos son obtenidos a partir del input de cada uno de ellos, si estan todos
 * los input necesarios, se agrega el registro y se crea la fila. En caso contrario 
 * se envia un mensaje alertando sobre el problema.
 * 
 * Al ejecutar la funcion se desplegara el dialog correspondiente para llenar los input necesarios.
 * El id del dialog es 'create_dialog'.
 * 
 */
function addRow()
{

	$("#create_dialog").dialog('option','title','Nuevo registro');

	$("#create_dialog" ).dialog(
	{
		buttons:[
		{
			text: "Agregar",
			click: function() 
			{
				var check=true;
				$(".datain").each(function(){
					if( $(this).val()== "" && $(this).attr("name") != "fcontinua" && $(this).attr("name") != "vmedio" ){ check = false; } return true; })

				if(check == false)
				{
					alert("Faltan Datos")
				}
				else
				{
					var campus=$("#campus").val()	
					var carrera=$("#carrera").val()
					var state=$("#estado").val()
					var fecha=$("#fecha").val()
					var anios=$("#anios").val()
					var aav=$("#aav").val()
					var aaa=$("#aaa").val()
					var ppregrado=$("#ppregrado").val()
					var investigacion=$("#aav").val()
					var fcontinua=$("#fcontinua").val()
					var vmedio=$("#vmedio").val()
					
					getXML("./xml/db.xml",
					function(xml)
					{
						var check=0;
						$(xml).find('campus').each(function()
						{
							if($(this).attr('name')==campus)
							{
								check=1;
								
								$(this).children('carrera').each(function()
								{
									if($(this).attr('name')==carrera)
									{
										check++;
									}		
								})	
										
							}		
						})
						if(check==2)
						{
							alert('ya existe este registo');
							return false;
						}
						
						$(xml).find('universidad').append('<campus></campus>');
						$(xml).find('universidad').children('campus').last().attr('name',campus)
						
						$(xml).find('universidad').children('campus').last().append('<carrera></carrera>')
						$(xml).find('universidad').children('campus').last().children('carrera').first().attr('name',carrera)
						
						$(xml).find('universidad').children('campus').last().children('carrera').first().append('<ProcesoDeEvaluacion></ProcesoDeEvaluacion>')
						$(xml).find('universidad').children('campus').last().children('carrera').first().children('ProcesoDeEvaluacion').first().attr('state',state)
						
						$(xml).find('universidad').children('campus').last().children('carrera').first().children('ProcesoDeEvaluacion').first().append('<FechaAcreditacion>'+fecha+'</FechaAcreditacion>')
						$(xml).find('universidad').children('campus').last().children('carrera').first().children('ProcesoDeEvaluacion').first().append('<AniosAcreditacion>'+anios+'</AniosAcreditacion>')
						$(xml).find('universidad').children('campus').last().children('carrera').first().children('ProcesoDeEvaluacion').first().append('<AgenciaAcreditadoraVigente>'+aav+'</AgenciaAcreditadoraVigente>')
						$(xml).find('universidad').children('campus').last().children('carrera').first().children('ProcesoDeEvaluacion').first().append('<AgenciaAcreditadoraActual>'+aaa+'</AgenciaAcreditadoraActual>')
						$(xml).find('universidad').children('campus').last().children('carrera').first().children('ProcesoDeEvaluacion').first().append('<PerfilPregrado>'+ppregrado+'</PerfilPregrado>')
						$(xml).find('universidad').children('campus').last().children('carrera').first().children('ProcesoDeEvaluacion').first().append('<Investigacion>'+investigacion+'</Investigacion>')
						$(xml).find('universidad').children('campus').last().children('carrera').first().children('ProcesoDeEvaluacion').first().append('<FormacionContinua>'+fcontinua+'</FormacionContinua>')
						$(xml).find('universidad').children('campus').last().children('carrera').first().children('ProcesoDeEvaluacion').first().append('<VinculacionMedio>'+vmedio+'</VinculacionMedio>')
						
						$.post("./save.php",{s:$(xml).find('universidad').html()});
						var data=new Array();
						data=[campus,carrera,state,fecha,anios,aav,aaa,ppregrado,investigacion,fcontinua,vmedio];
						data.push("DELETE");
						
						var a = $('#table').dataTable().fnAddData( data);
						ntr = $('#table').dataTable().fnSettings().aoData[ a[0] ].nTr
						$(($(ntr.cells[0]).closest('tr').find('td:last'))).attr('class',"DELETE");
						
						$(".DELETE").each(function()
						{
							$(this).click(function(o)
							{
								deleteRow($(this).closest('tr').get(0));
							})
						})
					}
					,initfail);	
				}				
				$("#create_dialog").dialog( 'close' );
				$(".datain").val("");
			}
		}]
	});
	$( "#create_dialog" ).dialog('open');
}

/**
 * Borra la fila indicada por row, de la tabla y del registro
 * 
 * @param row Obejeto row que corresponde a la fila que se borrara de la tabla, tambien se borrara del registro
 */

function deleteRow(row)
{
	$("#delete_dialog").dialog('option','title','Eliminar registro');
	
	$( "#delete_dialog" ).dialog(
	{
		buttons:[
		{
			text: "Eliminar",
			click: function() 
			{
				var campus=$(row).find('td:first').text()
				var carrera=$(row).find('td:first').next().text()
				getXML("./xml/db.xml",
				function(xml)
				{
					var check=0;
					$(xml).find('campus').each(function()
					{
						if($(this).attr('name')==campus)
						{
							check=1;
							
							$(this).children('carrera').each(function()
							{
								if($(this).attr('name')==carrera)
								{
									check++;
									return false;
								}		
							})			
						}
						if(check==2)
						{
							$(this).remove();
							$.post("./save.php",{s:$(xml).find('universidad').html()});
							return false;
						}
						
					})
					
				}
				,initfail);
				
				$('#table').dataTable().fnDeleteRow(row);
				$( "#delete_dialog" ).dialog('close');		
			}		
		}]
	});
	$( "#delete_dialog" ).dialog('open');
	
}
